package xrc.config;

import xrc.pojo.User;

public class UserContext {

    /**
     * ThreadLocal是一个Java类，它提供了一种在多线程环境下存储线程本地变量的机制。
     * 每个线程都可以独立地设置和获取ThreadLocal变量，而不会影响其他线程的访问。
     *
     * 具体作用如下：
     *
     * 1、线程隔离：每个线程都可以独立地使用userHolder来存储和获取User对象，而不会受到其他线程的影响。这样可以避免多线程环境下共享变量的竞争和冲突。
     *
     * 2、线程特定数据：每个线程都可以通过userHolder保存一个属于自己的User对象，而不需要使用额外的同步机制。这在一些场景中非常有用，比如Web应用中的用户身份信息。
     *
     * 3、简化多线程编程：ThreadLocal可以简化多线程编程，尤其是在需要在多个方法或类之间传递一些特定于线程的上下文信息时。不再需要在每个方法参数中传递这些信息。
     */
    private static ThreadLocal<User> userHolder = new ThreadLocal<>();

    public static void setUser(User user) {
        userHolder.set(user);
    }

    public static User getUser() {
        return userHolder.get();
    }
}
